package base.interfacee;

/*
   从设计层面来说，抽象是对类的抽象，是一种模板设计，接口是行为的抽象，是一种行为的规范
 */
public interface Apple {

    String a = "这是一个final字段";

    // 定义一个默认方法
    default void see() {
        System.out.println("see, that is a apple!");
    }

    static void seeStatic() {
        System.out.println("see, that is a static apple!");
    }

    void seeNotImpl();

    /*
        1. 接口的方法默认是 public，所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认 实现），抽象类可以有非抽象的方法
        2. 接口中的实例变量默认是 final 类型的，而抽象类中则不一定
        3. 一个类可以实现多个接口，但最多只能实现一个抽象类
        4. 一个类实现接口的话要实现接口的所有方法，而抽象类不一定
        5. 接口不能用 new 实例化，但可以声明，但是必须引用一个实现该接口的对象
        从设计层面来说，抽象是对类的抽象，是一种模板设计，接口是行为的抽象，是一种行为的规范。
        备注:在 JDK8 中，接口也可以定义静态方法，可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口，接口中定义了一样的默认方法，必须重写，不然会报错。
     */
}
